#include "../aclib/Cryptor.h"
#include "../aclib/Encryptor.h"
#include "../aclib/Decryptor.h"
#include "../aclib/Block.h"
#include "../aclib/Key.h"

namespace AC = AppliedCryptography;

template<unsigned int TKeySize, unsigned int TBlockSize>
class MCryptor : public AC::Cryptor<TKeySize, TBlockSize>
{
public:
	MOCK_CONST_METHOD2_T(Process, void(const AC::Block<TBlockSize>&, AC::Block<TBlockSize>&));
	MOCK_CONST_METHOD0_T(Key, const AC::Key<TKeySize>&());
	MOCK_METHOD1_T(SetKey, void(const AC::Key<TKeySize>&));
};

template<unsigned int TKeySize, unsigned int TBlockSize>
class MDecryptor : public AC::Decryptor<TKeySize, TBlockSize>
{
public:
	MOCK_CONST_METHOD2_T(Process, void(const AC::Block<TBlockSize>&, AC::Block<TBlockSize>&));
	MOCK_CONST_METHOD0_T(Key, const AC::Key<TKeySize>&());
	MOCK_METHOD1_T(SetKey, void(const AC::Key<TKeySize>&));
};

template<unsigned int TKeySize, unsigned int TBlockSize>
class MEncryptor : public AC::Encryptor<TKeySize, TBlockSize>
{
public:
	MOCK_CONST_METHOD2_T(Process, void(const AC::Block<TBlockSize>&, AC::Block<TBlockSize>&));
	MOCK_CONST_METHOD0_T(Key, const AC::Key<TKeySize>&());
	MOCK_METHOD1_T(SetKey, void(const AC::Key<TKeySize>&));
};

